ワンコマンドでAmazon SWFのアプリケーションを作り始める
Amazon Simple Workflow Serviceを Mavenで簡単に始められるようにしてみた
はじめに
私は普段の繰り返し行われるようなちょっとした処理なんかにAmazon SWFをよく使うのですが、ちょっとした処理を作り始めたい時にAmazon SWFはコンパイルが通るようにするところまでが手間だったりしています。 日常的にSWFを使うのに、毎回糞長いpom.xmlを書いたり、flowframeworkがSDKをダウンロードしなくては行けなかったり、aptの設定なんかが非常に手間だったので、これはどうにかしたいと思いました。
Amazon SWFについての説明は Amazon Simple Workflow Service (SWF) 入門 | Developers.IOを参照して下さい。
手間を減らすために
SWFをもっと簡単に使えるように、mavenのarchetypeを自作しました。 これを使う事で、ちょっとした時にSWF使おと思ったらコマンド一つで、簡単に動かせるmavenのプロジェクトを作る事が出来ます。
使い方
interactiveModeに耐えられる方
[SHELL] $ mvn archetype:generate -DarchetypeCatalog=http://mvn.tottokug.com/catalogs/swf-application.xml [/SHELL]
interactiveModeに耐えられない方
[SHELL] $ mvn archetype:generate -DarchetypeCatalog=http://mvn.tottokug.com/catalogs/swf-application.xml -DarchetypeGroupId=com.tottokug -DarchetypeArtifactId=swf-application-archetype -DarchetypeVersion=1.7.9 -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion=1.0.0-SNAPSHOT -DinteractiveMode=false [/SHELL]
(書いた直後にflowframework Version 1.7.9 がリリースされたので、Versionをするようにしました。)
動かし方
出来上がったプロジェクトには最初から動く状態のHelloWorldなプログラムが準備されています。 それを起動するには以下のようにします。
- SWFでドメインを作成する。(デフォルトではus-east-1に)
- Deciderの起動
- Workerの起動
- Starterの起動
${groupId}のところは自分でプロジェクトを指定したものに置き換えてください。
ドメインの作成
[SHELL] $ aws swf --region us-east-1 register-domain --name sample --workflow-execution-retention-period-in-days 1 [/SHELL]
Deciderの起動
[SHELL] $ mvn clean compile exec:java -Dexec.mainClass=${groupId}.host.DeciderHost [/SHELL]
Workerの起動
[SHELL] $ mvn clean compile exec:java -Dexec.mainClass=${groupId}.host.ActivityHost [/SHELL]
Starterの起動
[SHELL] $ mvn clean compile exec:java -Dexec.mainClass=${groupId}.ExecutionStarter [/SHELL]
さいごに
これで、Amazon SWFをもっと気軽に使えるようになりました。 ちょっとした作業にSWFを使う事が出来ると、ちゃんと終わっているのかとか、そういった本筋ではない心配毎がぐっと減りますね。 ぜひこれを使ってSWFをもっと使ってみてください。